<?php
/**
 * run with command 
 * php start.php start
 */

use Workerman\Worker;
// composer 的 autoload 文件
include __DIR__ . '/vendor/autoload.php';

// 创建一个Worker监听2346端口，使用websocket协议通讯
$ws_worker = new Worker("http://0.0.0.0:2121");
// 启动4个进程对外提供服务
$ws_worker->count = 4;

// 当收到客户端发来的数据后返回hello $data给客户端
$ws_worker->onMessage = function($http_connection, $data)
{
	$_POST = $_POST ? $_POST : $_GET;
    // 推送数据的url格式 type=opendoor&doorid=id&userid=22
    // 假设消息数据为json，格式类似{"class":"class_name", "method":"method_name", "args":[]}
    $message = $_POST;
    // 格式如果是正确的，则尝试执行对应的类方法
    if (isset($message['class']) && isset($message['method'])) {
        // 要调用的类名，加上Consumer命名空间
        $class_name = "\\Consumer\\" . $message['class'];
        // 要调用的方法名
        $method = $message['method'];
        // 调用参数，是个数组
        $args = (array) $message;
        // 类存在则尝试执行
        if (class_exists($class_name)) {
            $class = new $class_name($args);
			unset($args['class'],$args['method']);
            $callback = array($class, $method);
            if (is_callable($callback)) {
                $msg = $class->$method($args);
				return $http_connection->send($msg);
            } else {
			    return $http_connection->send("$class_name::$method not exist\n");
            }
        } else {
			 return $http_connection->send("$class_name not exist\n");
        }
    } else {
		 return $http_connection->send("unknow message\n");
    }
    return $http_connection->send('fail');
	
};

if (!defined('GLOBAL_START')) {
    Worker::runAll();
}
